# _*_ utf-8 _*_
# 武将类
import random


class Hero:
    """
        武将类
    """
    hero_group_lst = ["魏", "蜀", "吴", "群雄", "其他"]

    def __init__(self, hero_id, hero_name, hero_group="其他", hero_INT=0, hero_attack=0, hero_hp=0, hero_mp=0, hero_WINS=0):

        self.__hero_id__ = hero_id                  # 英雄id
        self.__hero_name__ = hero_name              # 英雄名称
        self.__hero_group__ = hero_group            # 阵营
        self.__hero_hp__ = hero_hp                  # 血量
        self.__hero_mp__ = hero_mp                  # 魔力值
        self.__hero_attack__ = hero_attack          # 攻击力
        self.__weapon__ = None                      # 武器
        self.__hero_type__ = None                   # 类型
        self.__INT__ = hero_INT                            # 智力值
        self.__WINS__ = hero_WINS                           # 当前英雄胜利的场次

    def __str__(self):
        info = "{:^10d}{:^6}\t{:<8d}{:<8d}{:<8d}{:<8d}{:<8d}"
        return info.format(self.__hero_id__, self.__hero_name__, self.__hero_attack__,
                           self.__INT__, self.__hero_hp__, self.__hero_mp__, self.__WINS__
                           )

    def __eq__(self, other):
        return self.__hero_id__ == other.get_hero_id()

    def get_hero_id(self):
        return self.__hero_id__

    def get_hero_name(self):
        return self.__hero_name__

    def get_hero_group(self):
        return self.__hero_group__

    def set_hero_name(self, hero_name):
        self.__hero_name__ = hero_name

    def set_hero_group(self, hero_group):
        self.__hero_group__ = hero_group

    def set_hero_hp(self, hp):
        self.__hero_hp__ = hp

    def get_hero_hp(self):
        return self.__hero_hp__

    def set_hero_mp(self, mp):
        self.__hero_mp__ = mp

    def get_hero_mp(self):
        return self.__hero_mp__

    def set_hero_attack(self, attack):
        self.__hero_attack__ = attack

    def get_hero_attack(self):
        return self.__hero_attack__

    def set_hero_type(self,hero_type):
        self.__hero_type__ = hero_type

    def get_hero_type(self):
        return self.__hero_type__

    def set_weapon(self, weapon):
        self.__weapon__ = weapon

    def get_weapon(self):
        return self.__weapon__

    def set_hero_INT(self, INT):
        self.__INT__ = INT

    def get_hero_INT(self):
        return self.__INT__

    def set_WINS(self, WINS):
        self.__WINS__ = WINS

    def get_WINS(self):
        return self.__WINS__

    def attack(self, hero):
        """
        英雄的攻击方法
        攻击的公式为：敌方实际伤害 =（max(己方武力值，己方智力值) - 对方智力值 // 4） // 10
        :param hero:被攻击的英雄
        :return:返回攻击攻击是否成功
        """
        if self is not hero and self.__hero_hp__ > 0 and hero.__hero_hp__ > 0:    # 传进来的不是当前英雄，并且当前的英雄与被攻击英雄血量都健康
            self_attack = random.randint(0, (max(self.__hero_attack__, self.__INT__) - hero.get_hero_INT() // 4) // 10)
            hero.set_hero_hp(hero.get_hero_hp() - self_attack)
            return True
        return False

    def attack(self, hero, p1_attack_power):
        """
            英雄的进攻方法：
        :param hero: 要攻击的英雄
        :param p1_attack_power: 当前英雄的攻击力
        :return:
        """
        hero.set_hero_hp(hero.get_hero_hp() - p1_attack_power)

    def get_attack_power(self, hero):
        return random.randint(0, abs((max(self.__hero_attack__, self.__INT__) - hero.get_hero_INT() // 4)) // 10)

    def get_group(self, index):
        length = len(self.hero_group_lst)
        if index < 0 or index >= length:
            return self.hero_group_lst[length]
        return self.hero_group_lst[index]
